<script>
// This is a regresion test for a layout test harness crash that was
// covered by https://crbug.com/716085#c10.

// The test creates 2 subframes, each cross-origin from the main frame and from
// each other.  Once all the subframes report (via postMessage("subframe is
// loaded"...)) that they are ready, the main frame asks them to nearly
// simultaneously call testRunner.notifyDone() (from 2 separate OOPIF processes
// under --site-per-process mode).  This used to crash the layout tests harness.

function addFrame(uri) {
  var f = document.createElement('iframe');
  f.src = uri;
  document.body.appendChild(f);
}

var loaded_frames = 0;
function onLoad() {
  if (parent === self) {
    document.body.innerText = 'Main frame';
    testRunner.waitUntilDone();
    testRunner.dumpAsText();
    testRunner.dumpChildFrames();

    window.addEventListener("message", function(event) {
        loaded_frames = loaded_frames + 1;
        if (loaded_frames == 2) {  // All subframes are ready?
          for (var i = 0; i < window.frames.length; i++) {
            window.frames[i].postMessage("notify done", "*");
          }
        }
    }, false);

    addFrame("https://localhost:8443/misc/tests-finishing-simultaneously.html");
    addFrame("http://localhost:8000/misc/tests-finishing-simultaneously.html");
  } else {
    document.body.innerText = 'Subframe: ' + location.href;
    window.addEventListener("message", function(event) {
        testRunner.notifyDone();
    }, false);
    parent.postMessage("subframe is loaded", "*");
  }
}
</script>
<body onload="onLoad()">
</body>

